package org.deng.learn.designpattern.visitor;

/**
 * @Author DengLibin
 * @Date 19-5-5
 * @Time 下午4:14
 * @Desc
 */
public class Main {
    /**
     * 访问者模式:
     *      表示一个作用于某个对象结构中的各元素的操作.使得可以在不改变各元素的类的前提下拓展作用于这些元素的新操作.
     *角色以及职责:
     *      Element： 字面意思是元素的意思。在这里是被访问者的抽象，也就是我在文章开头说的数据结构的抽象。
     *      ConcreteElement： Element 的实现类，即具体的被访问者。
     *      Visitor： 访问者的抽象。所谓的访问者就是对Element的具体操作进行封装的对象。通常Visitor是一个接口。
     *      ConcreteVisitor： Visitor 的实现类，即具体的访问者。
     *      ObjectStructure： 结构对象。可以认为是Element这个数据结构的持有者。通常情况下是一个容器
     *  使用场景:
     *      对相对固定的数据结构进行操作，且希望能够很方便的对这个数据结构具备的操作进行扩展
     *
     *
     *  要求:被被访问者要稳定(要有确定的子类)
     *
     */

    public  static  void main(String[] args){

        Element element = new ElementA();
        Visitor visitor = new Visitor1();
        element.accept(visitor);

        element = new ElementB();
        visitor = new Visitor2();
        element.accept(visitor);
    }
}
